package com.ktjy.controller;

import com.ktjy.entity.Supplier;
import com.ktjy.entity.SysUser;
import com.ktjy.service.SupplierService;
import com.ktjy.service.UploadService;
import com.ktjy.utils.Constants;
import com.ktjy.utils.Page;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;

/**
 * @version v1.0
 * @Author JieGe
 * @Create 2024-12-19 - 11:38
 */
@Controller
@RequestMapping("/main/supplier")
public class SupplierController extends BaseController {

    private static final Logger LOGGER = LoggerFactory.getLogger(SupplierController.class);
    // 注入SupplierService接口实现类
    @Autowired
    private SupplierService supplierService;

    @RequestMapping("/page")
    public String page(Model model, Supplier condition,
                       @RequestParam(value = "pageNo", defaultValue = "1")Integer pageNo,
                       @RequestParam(value = "pageSize", defaultValue = "5")Integer pageSize) {
        try {
            // 1、调用service查询供应商分页数据
            Page<Supplier> page = supplierService.getSuppliersPage(condition, pageNo, pageSize);
            // 2、将查询条件以及page保存到Model中
            model.addAttribute("pageInfo", page);
            model.addAttribute("condition", condition);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "supplier/page";  // 返回供应商分页的逻辑视图名
    }

    // 1、跳转到供应商的新增页面
    @GetMapping("/save")
    public String save(Model model) {
        // 保存空的供货商对象
        model.addAttribute("supplier", new Supplier());  // 可以防止页面上的空指针异常
        return "supplier/save"; // 仅仅只需要跳转到供货商新增页面，
    }
    // 注入文件上传业务接口实现类
    @Autowired
    @Qualifier("toLocalUploadService")
    private UploadService uploadService;  // 用于文件上传
    // 2、保存新增后的供货商信息
    @PostMapping("/save")
    public String save(Supplier supplier,
                       // 用来接收从save.jsp新增页面传递过来的营业执行图片文件
                       @RequestParam("bizPic") MultipartFile bizPic) {
        // 上传文件的保存路径
        // 1、允许的上传文件扩展名
        String [] allowImageExt = {"jpg", "jpeg", "png", "gif", "bmp"};
        try {
            if (bizPic != null) {
                // 2、上传营业执照
                String bizPicPath = uploadService.uploadFile(bizPic, allowImageExt);
                // 3、将证件照的图片地址保存到SysUser用户对象中
                supplier.setBizPicPath(bizPicPath);
            }

            // 获取登录成功后，保存到session中的用户对象
            SysUser loginUser = session(Constants.SESSION_USER);
            if (supplier.getId() == null) {  // 说明新增
                supplier.setCreatedUserId(loginUser.getId()); // 创建者id
                supplier.setCreatedTime(new Date());  // 创建时间
            } else {  // 更新操作
                supplier.setUpdatedUserId(loginUser.getId()); // 更新者id
                supplier.setUpdatedTime(new Date());  // 更新时间
            }
            // 调用service中的saveOrUpdate()方法进行新增和修改用户信息
            if (supplierService.saveOrUpdate(supplier)) {
                // 说明新增或者修改成功，跳转到供货商列表页面
                return redirect("/main/supplier/page");
            }
        }catch (Exception e){
            e.printStackTrace();
            LOGGER.error("执行SupplierController中的Save()方法发生错误，", e);
        }
        return "supplier/save";
    }

    // 使用rest传递过来的供货商id
    @GetMapping("/view/{id}")
    // @PathVariable("id") 得到{id}所匹配到的供货商id的值
    public String view(@PathVariable("id") Integer id, Model model) {
        Supplier supplier = supplierService.getSupplier(id);
        // 保存供货商信息
        model.addAttribute("supplier", supplier);
        // 最后再跳转到供货商详情信息
        return "supplier/view";
    }

    // 缺少一个 通过供货商id查询供货商详情，然后再跳转到供货商修改页面
    @GetMapping("/edit")
    public String edit(@RequestParam("id")Integer id, Model model) {
        // 1、只需要通过供货商id查询供货商详情
        Supplier supplier = supplierService.getSupplier(id);
        // 保存供货商信息
        model.addAttribute("supplier", supplier);
        return "supplier/save";  // 跳转到供货商修改页面 save.jsp
    }

}
